احراز هویت امن و یکپارچه کاربر را با OAuth2 باز کنید. این راهنما نمای کلی مفصلی از پیادهسازی OAuth2 برای دسترسی شخص ثالث ارائه میدهد.
پیادهسازی OAuth2: راهنمای جامع احراز هویت شخص ثالث
در چشم انداز دیجیتال به هم پیوسته امروزی، احراز هویت یکپارچه و امن کاربر از اهمیت بالایی برخوردار است. OAuth2 به عنوان پروتکل استاندارد صنعت برای فعال کردن برنامههای شخص ثالث برای دسترسی به منابع کاربر در یک سرویس دیگر بدون افشای اعتبارنامههای آنها ظهور کرده است. این راهنمای جامع به پیچیدگی های پیادهسازی OAuth2 می پردازد و دانش و راهنمایی های عملی مورد نیاز برای ادغام این چارچوب مجوز قدرتمند در برنامه های خود را در اختیار توسعه دهندگان قرار می دهد.
OAuth2 چیست؟
OAuth2 (مجوز باز) یک چارچوب مجوز است که یک برنامه شخص ثالث را قادر می سازد تا به دسترسی محدودی به یک سرویس HTTP از طرف یک کاربر دست یابد، یا با تنظیم تأییدیه توسط کاربر، یا با اجازه دادن به برنامه شخص ثالث برای به دست آوردن دسترسی از طرف خود. OAuth2 بر سادگی توسعه دهنده مشتری متمرکز است در حالی که جریان های مجوز خاصی را برای برنامه های وب، برنامه های دسکتاپ، تلفن های همراه و دستگاه های اتاق نشیمن ارائه می دهد.
آن را مانند پارکبان در نظر بگیرید. شما کلیدهای ماشین خود (اعتبارنامه ها) را به یک پارکبان مورد اعتماد (برنامه شخص ثالث) تحویل می دهید تا آنها بتوانند ماشین شما را پارک کنند (به منابع شما دسترسی پیدا کنند) بدون اینکه شما مجبور باشید مستقیماً به همه چیز در ماشین خود دسترسی بدهید. شما کنترل را حفظ می کنید و همیشه می توانید کلیدهای خود را بازیابی کنید (دسترسی را لغو کنید).
مفاهیم کلیدی در OAuth2
درک مفاهیم اصلی OAuth2 برای پیادهسازی موفقیتآمیز بسیار مهم است:
- صاحب منبع: نهادی که قادر به اعطای دسترسی به یک منبع محافظت شده است. به طور معمول، این کاربر نهایی است.
- سرور منبع: سروری که منابع محافظت شده را میزبانی می کند، که درخواست های منبع محافظت شده را با استفاده از توکن های دسترسی می پذیرد و به آنها پاسخ می دهد.
- برنامه کاربردی مشتری: برنامه ای که از طرف صاحب منبع، درخواست دسترسی به منابع محافظت شده می کند. این می تواند یک برنامه وب، یک برنامه تلفن همراه یا یک برنامه دسکتاپ باشد.
- سرور مجوز: سروری که پس از احراز هویت موفقیت آمیز صاحب منبع و کسب مجوز آنها، توکن های دسترسی را به برنامه کاربردی مشتری صادر می کند.
- توکن دسترسی: یک اعتبارنامه که نشان دهنده مجوز اعطا شده توسط صاحب منبع به برنامه کاربردی مشتری است. توسط برنامه کاربردی مشتری برای دسترسی به منابع محافظت شده در سرور منبع استفاده می شود. توکن های دسترسی معمولاً طول عمر محدودی دارند.
- توکن بازخوانی: اعتبارنامه ای که برای به دست آوردن یک توکن دسترسی جدید بدون نیاز به مجوز مجدد برنامه کاربردی مشتری توسط صاحب منبع استفاده می شود. توکن های بازخوانی معمولاً طولانی مدت هستند و باید به طور ایمن ذخیره شوند.
- دامنه: مجوزهای خاص اعطا شده به برنامه کاربردی مشتری را تعریف می کند. به عنوان مثال، ممکن است به یک برنامه کاربردی مشتری دسترسی فقط خواندنی به نمایه کاربر داده شود، اما امکان اصلاح آن وجود نداشته باشد.
انواع مجوز OAuth2
OAuth2 چندین نوع مجوز را تعریف می کند که هر کدام متناسب با موارد استفاده خاص و الزامات امنیتی هستند. انتخاب نوع مجوز مناسب برای اطمینان از یک تجربه احراز هویت امن و کاربرپسند بسیار مهم است.
1. مجوز کد مجوز
مجوز کد مجوز رایج ترین و توصیه شده ترین نوع مجوز برای برنامه های وب است. این شامل یک فرآیند چند مرحله ای است که اطمینان می دهد رمز مشتری هرگز در معرض مرورگر صاحب منبع قرار نمی گیرد. این برای استفاده با مشتریان محرمانه (مشتریانی که قادر به حفظ محرمانه بودن رمز مشتری خود هستند) طراحی شده است. در اینجا یک تفکیک ساده وجود دارد:
- برنامه کاربردی مشتری، صاحب منبع را به سرور مجوز هدایت می کند.
- صاحب منبع با سرور مجوز احراز هویت می کند و به برنامه کاربردی مشتری اجازه می دهد.
- سرور مجوز، صاحب منبع را با یک کد مجوز به برنامه کاربردی مشتری هدایت می کند.
- برنامه کاربردی مشتری کد مجوز را با یک توکن دسترسی و یک توکن بازخوانی مبادله می کند.
- برنامه کاربردی مشتری از توکن دسترسی برای دسترسی به منابع محافظت شده در سرور منبع استفاده می کند.
مثال: یک کاربر می خواهد حساب Google Drive خود را به یک برنامه ویرایش اسناد شخص ثالث متصل کند. این برنامه، کاربر را به صفحه احراز هویت Google هدایت می کند، جایی که آنها وارد سیستم می شوند و به برنامه اجازه می دهند تا به فایل های Google Drive آنها دسترسی داشته باشد. سپس Google کاربر را با یک کد مجوز به برنامه هدایت می کند، که برنامه آن را با یک توکن دسترسی و توکن بازخوانی مبادله می کند.
2. مجوز ضمنی
مجوز ضمنی یک نسخه ساده شده از مجوز کد مجوز است که برای برنامه های کاربردی مشتری طراحی شده است که نمی توانند به طور ایمن یک رمز مشتری را ذخیره کنند، مانند برنامه های تک صفحه ای (SPA) که در یک مرورگر وب یا برنامه های تلفن همراه بومی اجرا می شوند. در این نوع مجوز، توکن دسترسی پس از احراز هویت صاحب منبع با سرور مجوز، مستقیماً به برنامه کاربردی مشتری بازگردانده می شود. با این حال، به دلیل خطر رهگیری توکن دسترسی، نسبت به مجوز کد مجوز، امنیت کمتری در نظر گرفته می شود.
نکته مهم: مجوز ضمنی اکنون تا حد زیادی منسوخ شده است. بهترین شیوه های امنیتی توصیه می کند به جای آن از مجوز کد مجوز با PKCE (کلید اثبات برای تبادل کد) استفاده شود، حتی برای SPA ها و برنامه های بومی.
3. مجوز اعتبارنامه های رمز عبور صاحب منبع
مجوز اعتبارنامه های رمز عبور صاحب منبع به برنامه کاربردی مشتری اجازه می دهد تا با ارائه مستقیم نام کاربری و رمز عبور صاحب منبع به سرور مجوز، یک توکن دسترسی به دست آورد. این نوع مجوز فقط باید زمانی استفاده شود که برنامه کاربردی مشتری بسیار مورد اعتماد باشد و رابطه مستقیمی با صاحب منبع داشته باشد. به طور کلی به دلیل خطرات امنیتی مرتبط با به اشتراک گذاری مستقیم اعتبارنامه ها با برنامه کاربردی مشتری، توصیه نمی شود.
مثال: یک برنامه تلفن همراه شخص اول که توسط یک بانک توسعه یافته است، ممکن است از این نوع مجوز برای اجازه دادن به کاربران برای دسترسی به حساب های خود استفاده کند. با این حال، برنامه های شخص ثالث به طور کلی باید از این نوع مجوز اجتناب کنند.
4. مجوز اعتبارنامه های مشتری
مجوز اعتبارنامه های مشتری به برنامه کاربردی مشتری اجازه می دهد تا با استفاده از اعتبارنامه های خود (شناسه مشتری و رمز مشتری) به جای اقدام از طرف صاحب منبع، یک توکن دسترسی به دست آورد. این نوع مجوز معمولاً برای ارتباط سرور به سرور یا زمانی استفاده می شود که برنامه کاربردی مشتری نیاز به دسترسی مستقیم به منابعی دارد که مالک آن است.
مثال: یک برنامه نظارتی که نیاز به دسترسی به معیارهای سرور از یک ارائه دهنده ابری دارد، ممکن است از این نوع مجوز استفاده کند.
5. مجوز بازخوانی توکن
مجوز بازخوانی توکن به برنامه کاربردی مشتری اجازه می دهد تا با استفاده از یک توکن بازخوانی، یک توکن دسترسی جدید به دست آورد. این به برنامه کاربردی مشتری اجازه می دهد تا بدون نیاز به مجوز مجدد برنامه توسط صاحب منبع، دسترسی به منابع محافظت شده را حفظ کند. توکن بازخوانی با یک توکن دسترسی جدید و به صورت اختیاری یک توکن بازخوانی جدید مبادله می شود. توکن دسترسی قدیمی باطل می شود.
پیادهسازی OAuth2: راهنمای گام به گام
پیادهسازی OAuth2 شامل چندین مرحله کلیدی است:
1. ثبت برنامه کاربردی مشتری خود
اولین قدم ثبت برنامه کاربردی مشتری خود با سرور مجوز است. این به طور معمول شامل ارائه اطلاعاتی مانند نام برنامه، توضیحات، URI های هدایت مجدد (جایی که سرور مجوز پس از احراز هویت، صاحب منبع را به آن هدایت می کند) و انواع مجوز مورد نظر است. سپس سرور مجوز یک شناسه مشتری و یک رمز مشتری صادر می کند که برای شناسایی و احراز هویت برنامه شما استفاده می شود.
مثال: هنگام ثبت برنامه خود با سرویس OAuth2 Google، باید یک URI هدایت مجدد ارائه دهید، که باید با URI مطابقت داشته باشد که برنامه شما برای دریافت کد مجوز استفاده می کند. همچنین باید دامنه هایی را که برنامه شما نیاز دارد، مانند دسترسی به Google Drive یا Gmail مشخص کنید.
2. آغاز جریان مجوز
مرحله بعدی آغاز جریان مجوز است. این شامل هدایت صاحب منبع به نقطه پایانی مجوز سرور مجوز است. نقطه پایانی مجوز معمولاً به پارامترهای زیر نیاز دارد:
client_id: شناسه مشتری صادر شده توسط سرور مجوز.redirect_uri: URI که سرور مجوز پس از احراز هویت، صاحب منبع را به آن هدایت می کند.response_type: نوع پاسخ مورد انتظار از سرور مجوز (به عنوان مثال،codeبرای مجوز کد مجوز).scope: دامنه های دسترسی مورد نظر.state: یک پارامتر اختیاری که برای جلوگیری از حملات جعل درخواست بین سایتی (CSRF) استفاده می شود.
مثال: یک URI هدایت مجدد ممکن است به این شکل باشد: https://example.com/oauth2/callback. پارامتر state یک رشته تصادفی تولید شده است که برنامه شما می تواند از آن برای تأیید اینکه پاسخ از سرور مجوز قانونی است، استفاده کند.
3. رسیدگی به پاسخ مجوز
پس از اینکه صاحب منبع با سرور مجوز احراز هویت کرد و به برنامه کاربردی مشتری اجازه داد، سرور مجوز صاحب منبع را با یک کد مجوز (برای مجوز کد مجوز) یا یک توکن دسترسی (برای مجوز ضمنی) به URI هدایت مجدد برنامه کاربردی مشتری هدایت می کند. سپس برنامه کاربردی مشتری باید به طور مناسب به این پاسخ رسیدگی کند.
مثال: اگر سرور مجوز یک کد مجوز را برگرداند، برنامه کاربردی مشتری باید با ارسال یک درخواست POST به نقطه پایانی توکن سرور مجوز، آن را با یک توکن دسترسی و یک توکن بازخوانی مبادله کند. نقطه پایانی توکن معمولاً به پارامترهای زیر نیاز دارد:
grant_type: نوع مجوز (به عنوان مثال،authorization_code).code: کد مجوز دریافتی از سرور مجوز.redirect_uri: همان URI هدایت مجددی که در درخواست مجوز استفاده شده است.client_id: شناسه مشتری صادر شده توسط سرور مجوز.client_secret: رمز مشتری صادر شده توسط سرور مجوز (برای مشتریان محرمانه).
4. دسترسی به منابع محافظت شده
هنگامی که برنامه کاربردی مشتری یک توکن دسترسی به دست آورد، می تواند از آن برای دسترسی به منابع محافظت شده در سرور منبع استفاده کند. توکن دسترسی معمولاً در هدر Authorization درخواست HTTP با استفاده از طرح Bearer گنجانده می شود.
مثال: برای دسترسی به نمایه کاربر در یک پلتفرم رسانه اجتماعی، برنامه کاربردی مشتری ممکن است درخواستی مانند این ایجاد کند:
GET /api/v1/me HTTP/1.1
Host: api.example.com
Authorization: Bearer [access_token]
5. رسیدگی به بازخوانی توکن
توکن های دسترسی معمولاً طول عمر محدودی دارند. هنگامی که یک توکن دسترسی منقضی می شود، برنامه کاربردی مشتری می تواند از توکن بازخوانی برای به دست آوردن یک توکن دسترسی جدید بدون نیاز به مجوز مجدد برنامه توسط صاحب منبع استفاده کند. برای بازخوانی توکن دسترسی، برنامه کاربردی مشتری یک درخواست POST به نقطه پایانی توکن سرور مجوز با پارامترهای زیر ارسال می کند:
grant_type: نوع مجوز (به عنوان مثال،refresh_token).refresh_token: توکن بازخوانی دریافتی از سرور مجوز.client_id: شناسه مشتری صادر شده توسط سرور مجوز.client_secret: رمز مشتری صادر شده توسط سرور مجوز (برای مشتریان محرمانه).
ملاحظات امنیتی
OAuth2 یک چارچوب مجوز قدرتمند است، اما پیادهسازی ایمن آن برای محافظت از دادههای کاربر و جلوگیری از حملات مهم است. در اینجا برخی از ملاحظات امنیتی کلیدی وجود دارد:
- از HTTPS استفاده کنید: تمام ارتباطات بین برنامه کاربردی مشتری، سرور مجوز و سرور منبع باید با استفاده از HTTPS رمزگذاری شود تا از استراق سمع جلوگیری شود.
- URI های هدایت مجدد را اعتبارسنجی کنید: URI های هدایت مجدد را با دقت اعتبارسنجی کنید تا از حملات تزریق کد مجوز جلوگیری شود. فقط به URI های هدایت مجدد ثبت شده اجازه دهید و اطمینان حاصل کنید که به درستی قالب بندی شده اند.
- از رمزهای مشتری محافظت کنید: رمزهای مشتری را محرمانه نگه دارید. هرگز آنها را در کد سمت مشتری ذخیره نکنید یا در معرض طرف های غیرمجاز قرار ندهید.
- پارامتر حالت را پیادهسازی کنید: از پارامتر
stateبرای جلوگیری از حملات CSRF استفاده کنید. - توکن های دسترسی را اعتبارسنجی کنید: سرور منبع باید قبل از اعطای دسترسی به منابع محافظت شده، توکن های دسترسی را اعتبارسنجی کند. این به طور معمول شامل تأیید امضا و زمان انقضای توکن است.
- دامنه را پیادهسازی کنید: از دامنه ها برای محدود کردن مجوزهای اعطا شده به برنامه کاربردی مشتری استفاده کنید. فقط حداقل مجوزهای لازم را اعطا کنید.
- ذخیره سازی توکن: توکن ها را به طور ایمن ذخیره کنید. برای برنامه های بومی، از مکانیسم های ذخیره سازی امن سیستم عامل استفاده کنید. برای برنامه های وب، از کوکی های امن یا جلسات سمت سرور استفاده کنید.
- PKCE (کلید اثبات برای تبادل کد) را در نظر بگیرید: برای برنامه هایی که نمی توانند به طور ایمن یک رمز مشتری را ذخیره کنند (مانند SPA ها و برنامه های بومی)، از PKCE برای کاهش خطر رهگیری کد مجوز استفاده کنید.
OpenID Connect (OIDC)
OpenID Connect (OIDC) یک لایه احراز هویت است که بر روی OAuth2 ساخته شده است. این یک روش استاندارد برای برنامه های کاربردی مشتری فراهم می کند تا هویت صاحب منبع را بر اساس احراز هویتی که توسط سرور مجوز انجام شده است، تأیید کنند، و همچنین اطلاعات نمایه اساسی در مورد صاحب منبع را به روشی قابل تعامل و REST مانند به دست آورند.
در حالی که OAuth2 در درجه اول یک چارچوب مجوز است، OIDC جزء احراز هویت را اضافه می کند و آن را برای موارد استفاده ای مناسب می کند که در آن نه تنها باید دسترسی به منابع را مجاز کنید، بلکه هویت کاربر را نیز تأیید کنید. OIDC مفهوم توکن ID را معرفی می کند، که یک توکن وب JSON (JWT) است که حاوی ادعاهایی در مورد هویت کاربر است.
هنگام پیادهسازی OIDC، پاسخ از سرور مجوز شامل یک توکن دسترسی (برای دسترسی به منابع محافظت شده) و یک توکن ID (برای تأیید هویت کاربر) خواهد بود.
انتخاب ارائه دهنده OAuth2
می توانید سرور مجوز OAuth2 خود را پیادهسازی کنید یا از یک ارائه دهنده شخص ثالث استفاده کنید. پیادهسازی سرور مجوز خود می تواند پیچیده و زمان بر باشد، اما به شما کنترل کاملی بر فرآیند احراز هویت می دهد. استفاده از یک ارائه دهنده شخص ثالث اغلب ساده تر و مقرون به صرفه تر است، اما به معنای تکیه بر یک شخص ثالث برای احراز هویت است.
برخی از ارائه دهندگان محبوب OAuth2 عبارتند از:
- Google Identity Platform
- Facebook Login
- Microsoft Azure Active Directory
- Auth0
- Okta
- Ping Identity
هنگام انتخاب یک ارائه دهنده OAuth2، عواملی مانند:
- قیمت گذاری
- ویژگی ها
- امنیت
- قابلیت اطمینان
- سهولت ادغام
- الزامات انطباق (به عنوان مثال، GDPR، CCPA)
- پشتیبانی توسعه دهنده
OAuth2 در محیط های مختلف
OAuth2 در طیف گسترده ای از محیط ها، از برنامه های وب و برنامه های تلفن همراه گرفته تا برنامه های دسکتاپ و دستگاه های IoT استفاده می شود. جزئیات پیادهسازی خاص ممکن است بسته به محیط متفاوت باشد، اما مفاهیم و اصول اصلی یکسان باقی می مانند.
برنامه های وب
در برنامه های وب، OAuth2 معمولاً با استفاده از مجوز کد مجوز با کد سمت سرور که انتقال و ذخیره سازی توکن را انجام می دهد، پیادهسازی می شود. برای برنامه های تک صفحه ای (SPA)، مجوز کد مجوز با PKCE رویکرد توصیه شده است.
برنامه های تلفن همراه
در برنامه های تلفن همراه، OAuth2 معمولاً با استفاده از مجوز کد مجوز با PKCE یا یک SDK بومی ارائه شده توسط ارائه دهنده OAuth2 پیادهسازی می شود. مهم است که توکن های دسترسی را به طور ایمن با استفاده از مکانیسم های ذخیره سازی امن سیستم عامل ذخیره کنید.
برنامه های دسکتاپ
در برنامه های دسکتاپ، OAuth2 را می توان با استفاده از مجوز کد مجوز با یک مرورگر تعبیه شده یا یک مرورگر سیستم پیادهسازی کرد. مشابه برنامه های تلفن همراه، مهم است که توکن های دسترسی را به طور ایمن ذخیره کنید.
دستگاه های IoT
در دستگاه های IoT، پیادهسازی OAuth2 می تواند به دلیل محدودیت منابع و محدودیت های امنیتی این دستگاه ها چالش برانگیزتر باشد. بسته به الزامات خاص، ممکن است از مجوز اعتبارنامه های مشتری یا یک نسخه ساده شده از مجوز کد مجوز استفاده شود.
عیب یابی مشکلات رایج OAuth2
پیادهسازی OAuth2 گاهی اوقات می تواند چالش برانگیز باشد. در اینجا برخی از مشکلات رایج و نحوه عیب یابی آنها آورده شده است:
- URI هدایت مجدد نامعتبر: اطمینان حاصل کنید که URI هدایت مجدد ثبت شده با سرور مجوز با URI استفاده شده در درخواست مجوز مطابقت دارد.
- شناسه مشتری یا رمز عبور نامعتبر: بررسی کنید که شناسه مشتری و رمز مشتری صحیح باشند.
- دامنه غیرمجاز: اطمینان حاصل کنید که دامنه های درخواستی توسط سرور مجوز پشتیبانی می شوند و به برنامه کاربردی مشتری مجوز دسترسی به آنها داده شده است.
- توکن دسترسی منقضی شده: از توکن بازخوانی برای به دست آوردن یک توکن دسترسی جدید استفاده کنید.
- اعتبارسنجی توکن ناموفق بود: اطمینان حاصل کنید که سرور منبع به درستی برای اعتبارسنجی توکن های دسترسی پیکربندی شده است.
- خطاهای CORS: اگر با خطاهای اشتراکگذاری منابع متقاطع (CORS) مواجه می شوید، اطمینان حاصل کنید که سرور مجوز و سرور منبع به درستی برای اجازه دادن به درخواست ها از مبدأ برنامه کاربردی مشتری شما پیکربندی شده اند.
نتیجه گیری
OAuth2 یک چارچوب مجوز قدرتمند و همه کاره است که احراز هویت امن و یکپارچه کاربر را برای طیف گسترده ای از برنامه ها فعال می کند. با درک مفاهیم اصلی، انواع مجوز و ملاحظات امنیتی، توسعه دهندگان می توانند به طور موثر OAuth2 را برای محافظت از داده های کاربر و ارائه یک تجربه کاربری عالی پیادهسازی کنند.
این راهنما نمای کلی جامعی از پیادهسازی OAuth2 ارائه کرده است. به یاد داشته باشید که برای اطلاعات و راهنمایی های دقیق تر، با مشخصات رسمی OAuth2 و مستندات ارائه دهنده OAuth2 انتخابی خود مشورت کنید. همیشه بهترین شیوه های امنیتی را در اولویت قرار دهید و از آخرین توصیه ها به روز بمانید تا از یکپارچگی و محرمانه بودن داده های کاربر اطمینان حاصل کنید.